<?php	namespace Admin\Controller;
/**
 * 分类管理控制器
 * @author 武斌	<wubin.mail@foxmail.com>
 */
class CateController extends CommonController
{
	protected $db;
	protected $type;
	/**
	 * 构造方法
	 */
	public function __construct()
	{
		parent::__construct();
		$this->db = new \Admin\Model\Cate;//实例化分类模型
		$this->type = new \Admin\Model\Type;//实例化类型模型
	}
	/**
	 * 首页数据
	 */
	public function index()
	{	//调用模型中的getAll方法，获得所有分类的树状结构
		$res = $this->db->getAll();
		//分配变量，显示首页模板
		View::with('data',$res)->make();
	}
	/**
	 * 添加顶级分类
	 */
	public function addTopCate()
	{	
		if(IS_POST)
		{	//执行分类模型中的addTopCate方法
			if(!$this->db->addTopCate())
			{	//添加失败，提示相应错误信息
				$this->error($this->db->getError());
			}
			//添加成功，提示成功信息，跳转到首页
			View::success('成功添加顶级分类',U('index'));
		}
		//显示模板
		View::make('addTop');
	}
	/**
	 * 添加子集分类
	 */
	public function addSonCate()
	{
		if(IS_POST)
		{	//执行分类模型中的addSonCate方法
			if(!$this->db->addSonCate())
			{	//添加失败，提示相应错误信息
				$this->error($this->db->getError());
			}
			//添加成功，提示成功信息，跳转到首页
			View::success('成功添加子集分类',U('index'));
		}
		//获得所有类型数据
		$type = $this->type->get();
		//分配变量，显示模板
		View::with('type',$type)->make('addSon');
	}
	/**
	 * 编辑
	 */
	public function edit()
	{	//所要编辑分类的分类cid
		$cid = Q('get.cid',0,'intval');
		if(IS_POST)
		{	//执行模型中edit方法
			if(!$this->db->edit($cid))
			{	//编辑失败，提示相应错误信息
				$this->error($this->db->getError());
			}
			//编辑成功，给出成功提示，跳转到首页
			View::success('编辑成功',U('index'));
		}
		//获取旧数据
		$oldData = $this->db->getOldData();
		//获取类型数据
		$type = $this->type->get();
		//分配变量，显示模板
		View::with('type',$type)->with('oldData',$oldData)->make();
	}
	/**
	 * 删除
	 */
	public function del()
	{	//调用分类模型中的删除方法
		$res = $this->db->del();
		//删除成功提示相应信息
		if($res['code'])
		{
			View::success($res['message'],U('index'));
		}
		//删除失败提示相应信息
		View::error($res['message']);

	}
	/**
	 * 异步实现,点击减号收起当前cid的所有子集
	 */
	public function ajaxJian()
	{	//异步接收的数据cid
		$cid = Q('cid',0,'intval');
		//所有分类数据
		$data = $this->db->get();
		//获得所有子集数据
		$sonCid = $this->getSon($data,$cid);
		//将所有自己返回
		View::ajax($sonCid);
		
	}
	
	/**
	 * 递归找子集
	 * @param $data	数组数据
	 * @param $cid	需要查询的cid的子集
	 */
	private function getSon($data,$cid)
	{
		static $temp = array();
		foreach ($data as $k => $v) {
			if($v['pid'] == $cid)
			{
				$temp[] = $v['cid'];
				$this->getSon($data,$v['cid']);
			}
		}
		return $temp;
	}
}
